const jsonwebtoken = require('jsonwebtoken')
// 私钥 不能泄露
const secret = 'sfsfsfsfsklklkl'
// 导入数据模型  model 操作数据库表的一些方法和类型约束
const userModel = require('../model/userModel')
const auth = {
  register(req, res) {
    // 1、接收用户传递的注册数据信息
    let data = req.body
    // 先查询用户是否已经存储,如果不存在再添加
    userModel.findOne(data).then((rs) => {
      console.log(rs)
      if (rs) {
        res.send({
          code: 1,
          msg: '已经注册过了',
          data: rs
        })
      } else {
        // 2、存储到mongodb
        userModel
          .insertMany([data])
          .then((rs) => {
            // console.log(rs)
            // 3、是否注册成功的信息
            if (rs) {
              res.send({
                code: 0,
                msg: '注册成功',
                data: rs
              })
            } else {
              res.send({
                code: 1,
                msg: '注册失败,请联系管理员',
                data: []
              })
            }
          })
          .catch((err) => {
            // console.log(err.code)
            // console.log(err.writeErrors[0].err.errmsg)
            console.log(err)
            res.send({
              code: 1,
              msg: err.writeErrors[0].err.errmsg,
              data: []
            })
          })
      }
    })
  },
  login(req, res) {
    let data = req.body
    userModel
      .findOne({ username: data.username, password: data.password }, { __v: 0 })
      .then((rs) => {
        // console.log(rs)
        // 3、是否能够使用手机号和密码匹配到信息
        if (rs) {
          token = jsonwebtoken.sign(
            // payload 载荷 参数信息
            {
              // 用户id
              uid: rs._id,
              // 过期时间
              exp: Math.ceil(Date.now() / 1000) + 7200
            },
            // 私钥
            secret
          )
          res.send({
            code: 0,
            msg: '登录成功',
            token,
            data: rs
          })
        } else {
          res.send({
            code: 1,
            msg: '登录失败,用户名或者密码错误',
            data: []
          })
        }
      })
      .catch((err) => {
        // console.log(err.code)
        // console.log(err.writeErrors[0].err.errmsg)
        res.send({
          code: 1,
          msg: err.writeErrors[0].err.errmsg,
          data: []
        })
      })
  },
  profile(req, res) {
    // const uid = req.payload.uid
    // ES6 对象结构语法
    const { uid } = req.payload
    userModel.findOne({ _id: uid }, { __v: 0 }).then((rs) => {
      // console.log(rs)
      if (rs) {
        token = jsonwebtoken.sign(
          // payload 载荷 参数信息
          {
            // 用户id
            uid: rs._id,
            // 过期时间
            exp: Math.ceil(Date.now() / 1000) + 7200
          },
          // 私钥
          secret
        )
        res.send({
          code: 0,
          msg: '个人信息获取成功',
          token,
          data: rs
        })
      } else {
        res.send({
          code: 1,
          msg: '个人信息获取失败',
          data: []
        })
      }
    })
  },
  list(req, res) {
    userModel.find({}, { __v: 0, password: 0 }).then((rs) => {
      let response = {}
      if (rs) {
        response = {
          code: 0,
          msg: 'success',
          data: rs
        }
      } else {
        response = {
          code: 1,
          msg: 'error',
          data: []
        }
      }
      res.send(response)
    })
  },
  // 根据用户的id,修改用户的权限
  setPermission(req, res) {
    // 接收用户的权限设置数据
    const permissionList = req.body.permissionList
    if (!permissionList) {
      res.send({
        code: 1,
        msg: '请传递权限参数'
      })
    }
    // 存储权限数据到用户列表中
    userModel
      .updateOne({ _id: req.body._id }, { $set: { acl: permissionList } })
      .then((rs) => {
        console.log(rs)
        if (rs.modifiedCount > 0) {
          res.send({
            code: 0,
            msg: '权限保存成功'
          })
        } else {
          res.send({
            code: 1,
            msg: '权限保存失败'
          })
        }
      })
  }
}
module.exports = auth
